// cf-54e
// 题意：给定n(<=1000)个区间，要你从每个区间取一个整数（一个区间里每个数
//       是等概率的取）。现在问所有取出来的数最高位为1的个数占n个数超过
//       百分之k的概率是多少。
//
// 题解：其实很简单的概率dp。可以对每个区间算出最高为1的个数和区间长度，
//       然后就是简单的转移了。用了long double并且分子分母不能单独算，
//       单独算会溢出，按概率来算。
//
// run: $exec < input
#include <iostream>
#include <iomanip>

int const maxn = 1007;
long long pow10[19];
long double a[maxn], tot[maxn];
long double f[maxn][maxn];
int n, k;

long long calc(long long x)
{
	long long t = 0, ret = 0;
	for (int i = 0; x; i++, x /= 10) {
		if (x == 1) ret += t + 1;
		else ret += pow10[i];
		t = (x % 10) * pow10[i] + t;
	}
	return ret;
}

int main()
{
	std::ios::sync_with_stdio(false);
	pow10[0] = 1;
	for (int i = 1; i < 19; i++) pow10[i] = pow10[i - 1] * 10;
	std::cin >> n;
	for (int i = 1; i <= n; i++) {
		long long l, r;
		std::cin >> l >> r;
		tot[i] = r - l + 1;
		a[i] = calc(r) - calc(l - 1);
	}
	std::cin >> k;
	k = (k * n + 99) / 100;
	f[0][0] = 1;
	for (int i = 1; i <= n; i++)
		for (int j = 0; j <= i; j++) {
			f[i][j] = f[i - 1][j] * (tot[i] - a[i]) / tot[i];
			if (j) f[i][j] += f[i - 1][j - 1] * a[i] / tot[i];
		}
	long double ans = 0;
	for (int i = k; i <= n; i++)
		ans += f[n][i];
	std::cout << std::fixed << std::setprecision(12) << ans << '\n';
}

